WAIT(2) | п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ Linux | WAIT(2) |
п≤п°п╞¶
wait, waitpid, waitid - п╬п╤п╦п╢п╟п╣я┌ я│п╪п╣п╫я┐ я│п╬я│я┌п╬я▐п╫п╦я▐ п©я─п╬я├п╣я│я│п╟
п·п▒п≈п·п═¶
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
п╒я─п╣п╠п╬п╡п╟п╫п╦я▐
п╪п╟п╨я─п╬я│п╟
я┌п╣я│я┌п╦я─п╬п╡п╟п╫п╦я▐
я│п╡п╬п╧я│я┌п╡
п╢п╩я▐ glibc
(я│п╪. feature_test_macros(7)):
waitid(): _SVID_SOURCE || _XOPEN_SOURCE
п·п÷п≤п║п░п²п≤п∙¶
п■п╟п╫п╫я▀п╣ я│п╦я│я┌п╣п╪п╫я▀п╣ п╡я▀п╥п╬п╡я▀ п╦я│п©п╬п╩я▄п╥я┐я▌я┌я│я▐ п╢п╩я▐ п╬п╤п╦п╢п╟п╫п╦я▐ п╦п╥п╪п╣п╫п╣п╫п╦я▐ я│п╬я│я┌п╬я▐п╫п╦я▐ п©я─п╬я├п╣я│я│п╟-п©п╬я┌п╬п╪п╨п╟ п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟ п╦ п©п╬п╩я┐я┤п╣п╫п╦я▐ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╬ п©п╬я┌п╬п╪п╨п╣, я┤я▄я▒ я│п╬я│я┌п╬я▐п╫п╦п╣ п╦п╥п╪п╣п╫п╦п╩п╬я│я▄. п║п╪п╣п╫п╬п╧ я│п╬я│я┌п╬я▐п╫п╦я▐ я│я┤п╦я┌п╟п╣я┌я│я▐: п©я─п╣п╨я─п╟я┴п╣п╫п╦п╣ я─п╟п╠п╬я┌я▀ п©п╬я┌п╬п╪п╨п╟, п╬я│я┌п╟п╫п╬п╡ п©п╬я┌п╬п╪п╨п╟ п©п╬ я│п╦пЁп╫п╟п╩я┐, п©я─п╬п╢п╬п╩п╤п╣п╫п╦п╣ я─п╟п╠п╬я┌я▀ п©п╬я┌п╬п╪п╨п╟ п©п╬ я│п╦пЁп╫п╟п╩я┐. п·п╤п╦п╢п╟п╫п╦п╣ п©я─п╣п╨я─п╟я┴п╣п╫п╦я▐ я─п╟п╠п╬я┌я▀ п©п╬я┌п╬п╪п╨п╟ п©п╬п╥п╡п╬п╩я▐п╣я┌ я│п╦я│я┌п╣п╪п╣ п╬я│п╡п╬п╠п╬п╢п╦я┌я▄ я─п╣я│я┐я─я│я▀, п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╡я┬п╦п╣я│я▐ п©п╬я┌п╬п╪п╨п╬п╪; п╣я│п╩п╦ п╬п╤п╦п╢п╟п╫п╦п╣ п╫п╣ п╡я▀п©п╬п╩п╫я▐п╣я┌я│я▐, я┌п╬ п©я─п╣п╨я─п╟я┌п╦п╡я┬п╦п╧ я─п╟п╠п╬я┌я┐ п©п╬я┌п╬п╪п╬п╨ п╬я│я┌п╟я▒я┌я│я▐ п╡ я│п╦я│я┌п╣п╪п╣ п╡ я│п╬я│я┌п╬я▐п╫п╦п╦ "п╥п╬п╪п╠п╦ (zombie)" (я│п╪. п≈п░п°п∙п╖п░п²п≤п╞ п╢п╟п╩п╣п╣).
п∙я│п╩п╦ я│п╬я│я┌п╬я▐п╫п╦п╣ п©п╬я┌п╬п╪п╨п╟ я┐п╤п╣ п╦п╥п╪п╣п╫п╦п╩п╬я│я▄, я┌п╬ п╡я▀п╥п╬п╡ я│я─п╟п╥я┐ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ я─п╣п╥я┐п╩я▄я┌п╟я┌. п▓ п©я─п╬я┌п╦п╡п╫п╬п╪ я│п╩я┐я┤п╟п╣, я─п╟п╠п╬я┌п╟ п©я─п╦п╬я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌я│я▐ п╢п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ п╫п╣ п©я─п╬п╦п╥п╬п╧п╢я▒я┌ п╦п╥п╪п╣п╫п╣п╫п╦п╣ я│п╬я│я┌п╬я▐п╫п╦я▐ п©п╬я┌п╬п╪п╨п╟ п╦п╩п╦ п╬п╠я─п╟п╠п╬я┌я┤п╦п╨ я│п╦пЁп╫п╟п╩п╬п╡ п╫п╣ п©я─п╣я─п╡я▒я┌ п╡я▀п╥п╬п╡ (п©я─п╣п╢п©п╬п╩п╟пЁп╟п╣я┌я│я▐, я┤я┌п╬ я│п╦я│я┌п╣п╪п╫я▀п╣ п╡я▀п╥п╬п╡я▀ п╫п╣ п©п╣я─п╣п╥п╟п©я┐я│п╨п╟я▌я┌я│я▐ п╟п╡я┌п╬п╪п╟я┌п╦я┤п╣я│п╨п╦ п╦п╥-п╥п╟ я┐п╨п╟п╥п╟п╫п╦я▐ я└п╩п╟пЁп╟ SA_RESTART п╡ sigaction(2)). п▓ п╬я│я┌п╟п╡я┬п╣п╧я│я▐ я┤п╟я│я┌п╦ я│я┌я─п╟п╫п╦я├я▀ п©п╬я┌п╬п╪п╬п╨, я┤я▄я▒ я│п╬я│я┌п╬я▐п╫п╦п╣ п╣я┴я▒ п╫п╣ п╠я▀п╩п╬ п©п╬п╩я┐я┤п╣п╫п╬ п╬п╢п╫п╦п╪ п╦п╥ я█я┌п╦я┘ я│п╦я│я┌п╣п╪п╫я▀я┘ п╡я▀п╥п╬п╡п╬п╡, п╫п╟п╥я▀п╡п╟п╣я┌я│я▐ п╬п╤п╦п╢п╟п╣п╪я▀п╪ (waitable).
wait() п╦ waitpid()¶
п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ wait() п©я─п╦п╬я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣ п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟ п╢п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ п╫п╣ п©я─п╣п╨я─п╟я┌п╦я┌ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣ п╬п╢п╦п╫ п╦п╥ п╣пЁп╬ п©п╬я┌п╬п╪п╨п╬п╡. п▓я▀п╥п╬п╡ wait(&status) я█п╨п╡п╦п╡п╟п╩п╣п╫я┌п╣п╫:
waitpid(-1, &status, 0);
п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ waitpid() п©я─п╦п╬я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣ п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟ п╢п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ п╫п╣ п╦п╥п╪п╣п╫п╦я┌я│я▐ я│п╬я│я┌п╬я▐п╫п╦п╣ п©п╬я┌п╬п╪п╨п╟, п╥п╟п╢п╟п╫п╫п╬пЁп╬ п╟я─пЁя┐п╪п╣п╫я┌п╬п╪ pid. п÷п╬ я┐п╪п╬п╩я┤п╟п╫п╦я▌ waitpid() п╬п╤п╦п╢п╟п╣я┌ я┌п╬п╩я▄п╨п╬ п©я─п╣п╨я─п╟я┴п╣п╫п╦я▐ я─п╟п╠п╬я┌я▀ п©п╬я┌п╬п╪п╨п╟, п╫п╬ я█я┌п╬ п╪п╬п╤п╫п╬ п╦п╥п╪п╣п╫п╦я┌я▄ я┤п╣я─п╣п╥ п╟я─пЁя┐п╪п╣п╫я┌ options п╨п╟п╨ п╬п©п╦я│п╟п╫п╬ п╢п╟п╩п╣п╣.
п≈п╫п╟я┤п╣п╫п╦п╣п╪ pid п╪п╬п╤п╣я┌ п╠я▀я┌я▄:
- < -1
- п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╫я┐п╤п╫п╬ п╤п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟, я┤п╣п╧ п╦п╢п╣п╫я┌п╦я└п╦п╨п╟я┌п╬я─ пЁя─я┐п©п©я▀ п©я─п╬я├п╣я│я│п╬п╡ я─п╟п╡п╣п╫ п╟п╠я│п╬п╩я▌я┌п╫п╬п╪я┐ п╥п╫п╟я┤п╣п╫п╦я▌ pid.
- -1
- п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╫я┐п╤п╫п╬ п╤п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟.
- 0
- п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╫я┐п╤п╫п╬ п╤п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟, я┤п╣п╧ п╦п╢п╣п╫я┌п╦я└п╦п╨п╟я┌п╬я─ пЁя─я┐п©п©я▀ п©я─п╬я├п╣я│я│п╬п╡ я─п╟п╡п╣п╫ я┌п╟п╨п╬п╡п╬п╪я┐ я┐ п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟.
- > 0
- п╬п╥п╫п╟я┤п╟п╣я┌, я┤я┌п╬ п╫я┐п╤п╫п╬ п╤п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟, я┤п╣п╧ п╦п╢п╣п╫я┌п╦я└п╦п╨п╟я┌п╬я─ п©я─п╬я├п╣я│я│п╟ я─п╟п╡п╣п╫ pid.
п≈п╫п╟я┤п╣п╫п╦п╣ options я│п╬п╥п╢п╟я▒я┌я│я▐ п©я┐я┌п╣п╪ п╠п╦я┌п╬п╡п╬п╧ п╬п©п╣я─п╟я├п╦п╦ п≤п⌡п≤ п╫п╟п╢ я│п╩п╣п╢я┐я▌я┴п╦п╪п╦ п╨п╬п╫я│я┌п╟п╫я┌п╟п╪п╦:
- WNOHANG
- п╬п╥п╫п╟я┤п╟п╣я┌ п╫п╣п╪п╣п╢п╩п╣п╫п╫я▀п╧ п╡п╬п╥п╡я─п╟я┌, п╣я│п╩п╦ п╫п╦ п╬п╢п╦п╫ п©п╬я┌п╬п╪п╬п╨ п╫п╣ п╥п╟п╡п╣я─я┬п╦п╩ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣.
- WUNTRACED
- я┌п╟п╨п╤п╣ п╡п╬п╥п╡я─п╟я┴п╟я┌я▄я│я▐, п╣я│п╩п╦ п╣я│я┌я▄ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫п╫я▀п╧ п©п╬я┌п╬п╪п╬п╨ (п╫п╬ п╫п╣ я┌я─п╟я│я│п╦я─я┐п╣п╪я▀п╧ я┤п╣я─п╣п╥ ptrace(2)). п║п╬я│я┌п╬я▐п╫п╦п╣ я┌я─п╟я│я│п╦я─я┐п╣п╪п╬пЁп╬ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫п╫п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟ п©я─п╣п╢п╬я│я┌п╟п╡п╩я▐п╣я┌я│я▐ п╢п╟п╤п╣ п╣я│п╩п╦ я█я┌п╬я┌ п╟я─пЁя┐п╪п╣п╫я┌ п╫п╣ я┐п╨п╟п╥п╟п╫.
- WCONTINUED (п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.6.10)
- я┌п╟п╨п╤п╣ п╡п╬п╥п╡я─п╟я┴п╟я┌я▄я│я▐, п╣я│п╩п╦ я─п╟п╠п╬я┌п╟ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫п╫п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟ п╡п╬п╥п╬п╠п╫п╬п╡п╦п╩п╟я│я▄ п╦п╥-п╥п╟ п©п╬п╩я┐я┤п╣п╫п╦я▐ я│п╦пЁп╫п╟п╩п╟ SIGCONT.
(п░я─пЁя┐п╪п╣п╫я┌я▀, п╦п╪п╣я▌я┴п╦п╣я│я▐ я┌п╬п╩я▄п╨п╬ п╡ Linux, я│п╪. п╢п╟п╩п╣п╣.)
п∙я│п╩п╦ status п╫п╣ я─п╟п╡п╣п╫ NULL, я┌п╬ wait() п╦ waitpid() я│п╬я┘я─п╟п╫я▐я▌я┌ п╦п╫я└п╬я─п╪п╟я├п╦я▌ п╬ я│п╬я│я┌п╬я▐п╫п╦п╦ п╡ п©п╣я─п╣п╪п╣п╫п╫п╬п╧ я┌п╦п©п╟ int, п╫п╟ п╨п╬я┌п╬я─я┐я▌ я┐п╨п╟п╥я▀п╡п╟п╣я┌ status. п╜я┌п╬ я├п╣п╩п╬п╣ п╪п╬п╤п╫п╬ п╦я│я│п╩п╣п╢п╬п╡п╟я┌я▄ я│ п©п╬п╪п╬я┴я▄я▌ я│п╩п╣п╢я┐я▌я┴п╦я┘ п╪п╟п╨я─п╬я│п╬п╡ (п╬п╫п╦ п©я─п╦п╫п╦п╪п╟я▌я┌ п╡ п╨п╟я┤п╣я│я┌п╡п╣ п╟я─пЁя┐п╪п╣п╫я┌п╟ я│п╟п╪п╬ я├п╣п╩п╬п╣, п╟ п╫п╣ я┐п╨п╟п╥п╟я┌п╣п╩я▄ п╫п╟ п╫п╣пЁп╬ п╨п╟п╨ wait() п╦ waitpid()!):
- WIFEXITED(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п╣я│п╩п╦ п©п╬я┌п╬п╪п╬п╨ п╫п╬я─п╪п╟п╩я▄п╫п╬ п╥п╟п╡п╣я─я┬п╦п╩я│я▐, я┌п╬ п╣я│я┌я▄ п╡я▀п╥п╡п╟п╩ exit(3) п╦п╩п╦ _exit(2), п╦п╩п╦ п╡п╣я─п╫я┐п╩я│я▐ п╦п╥ я└я┐п╫п╨я├п╦п╦ main().
- WEXITSTATUS(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╨п╬п╢ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п©п╬я┌п╬п╪п╨п╟. п·п╫ я│п╬я│я┌п╬п╦я┌ п╦п╥ п╡п╬я│я▄п╪п╦ п╪п╩п╟п╢я┬п╦я┘ п╠п╦я┌ п╟я─пЁя┐п╪п╣п╫я┌п╟ status, п╨п╬я┌п╬я─я▀п╧ п©п╬я┌п╬п╪п╬п╨ я┐п╨п╟п╥п╟п╩ п©я─п╦ п╡я▀п╥п╬п╡п╣ exit(3) п╦п╩п╦ _exit(2) п╦п╩п╦ п╡ п╟я─пЁя┐п╪п╣п╫я┌п╣ п╬п©п╣я─п╟я┌п╬я─п╟ return п╡ я└я┐п╫п╨я├п╦п╦ main(). п╜я┌п╬я┌ п╪п╟п╨я─п╬я│ п╪п╬п╤п╫п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄, я┌п╬п╩я▄п╨п╬ п╣я│п╩п╦ WIFEXITED п╡п╣я─п╫я┐п╩ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣.
- WIFSIGNALED(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п╣я│п╩п╦ п©п╬я┌п╬п╪п╬п╨ п╥п╟п╡п╣я─я┬п╦п╩я│я▐ п╦п╥-п╥п╟ я│п╦пЁп╫п╟п╩п╟.
- WTERMSIG(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╪п╣я─ я│п╦пЁп╫п╟п╩п╟, п╨п╬я┌п╬я─я▀п╧ п©я─п╦п╡п╣п╩ п╨ п╥п╟п╡п╣я─я┬п╣п╫п╦я▌ п©п╬я┌п╬п╪п╨п╟. п╜я┌п╬я┌ п╪п╟п╨я─п╬я│ п╪п╬п╤п╫п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄, я┌п╬п╩я▄п╨п╬ п╣я│п╩п╦ WIFSIGNALED п╡п╣я─п╫я┐п╩ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣.
- WCOREDUMP(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п╣я│п╩п╦ п©п╬я┌п╬п╪п╬п╨ я│п╬п╥п╢п╟п╩ п╢п╟п╪п© п©п╟п╪я▐я┌п╦ (core dump). п■п╟п╫п╫я▀п╧ п╪п╟п╨я─п╬я│ п╢п╬п╩п╤п╣п╫ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ я┌п╬п╩я▄п╨п╬, п╣я│п╩п╦ п©я─п╦ WIFSIGNALED п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣. п■п╟п╫п╫я▀п╧ п╪п╟п╨я─п╬я│ п╫п╣ я┐п╨п╟п╥п╟п╫ п╡ POSIX.1-2001 п╦ п╫п╣п╢п╬я│я┌я┐п©п╣п╫ п╡ п╫п╣п╨п╬я┌п╬я─я▀я┘ я─п╣п╟п╩п╦п╥п╟я├п╦я▐я┘ Unix (п╫п╟п©я─п╦п╪п╣я─, AIX, SunOS). п≤я│п©п╬п╩я▄п╥я┐п╧я┌п╣ п╣пЁп╬ п╬п╠я─п╟п╪п╩я▒п╫п╫я▀п╪ #ifdef WCOREDUMP ... #endif.
- WIFSTOPPED(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п╣я│п╩п╦ п©п╬я┌п╬п╪п╬п╨ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫ п©п╬ я│п╦пЁп╫п╟п╩я┐; я█я┌п╬ п╡п╬п╥п╪п╬п╤п╫п╬ я┌п╬п╩я▄п╨п╬, п╣я│п╩п╦ п©я─п╦ п╡я▀п╥п╬п╡п╣ п╠я▀п╩ я┐п╨п╟п╥п╟п╫ я└п╩п╟пЁ WUNTRACED п╦п╩п╦ п╣я│п╩п╦ п╫п╟п╢ п©п╬я┌п╬п╪п╨п╬п╪ п╡я▀п©п╬п╩п╫я▐п╣я┌я│я▐ я┌я─п╟я│я│п╦я─п╬п╡п╨п╟ (я│п╪. ptrace(2)).
- WSTOPSIG(status)
- п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╫п╬п╪п╣я─ я│п╦пЁп╫п╟п╩п╟, п╦п╥-п╥п╟ п╨п╬я┌п╬я─п╬пЁп╬ п©п╬я┌п╬п╪п╬п╨ п╠я▀п╩ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫. п╜я┌п╬я┌ п╪п╟п╨я─п╬я│ п╪п╬п╤п╫п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄ я┌п╬п╩я▄п╨п╬, п╣я│п╩п╦ п©я─п╦ WIFSTOPPED п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣.
- WIFCONTINUED(status)
- (п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.6.10) п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ п╦я│я┌п╦п╫п╫п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣, п╣я│п╩п╦ п©п╬я┌п╬п╪п╬п╨п©я─п╬п╢п╬п╩п╤п╦п╩ я─п╟п╠п╬я┌я┐, п©п╬п╩я┐я┤п╦п╡ я│п╦пЁп╫п╟п╩ SIGCONT.
waitid()¶
п║п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ waitid() (п╢п╬я│я┌я┐п©п╣п╫, п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.6.9) п©я─п╣п╢п╬я│я┌п╟п╡п╩я▐п╣я┌ п╠п╬п╩п╣п╣ п©п╬п╩п╫я▀п╧ п╨п╬п╫я┌я─п╬п╩я▄ п╫п╟п╢ я┌п╣п╪, п╨п╟п╨п╬пЁп╬ п╦п╥п╪п╣п╫п╣п╫п╦я▐ я│п╬я│я┌п╬я▐п╫п╦я▐ п╫я┐п╤п╫п╬ п╤п╢п╟я┌я▄ я┐ п©п╬я┌п╬п╪п╨п╟.
п░я─пЁя┐п╪п╣п╫я┌я▀ idtype п╦ id п╬п©я─п╣п╢п╣п╩я▐я▌я┌ п╨п╟п╨п╬пЁп╬(п╦я┘) п©п╬я┌п╬п╪п╨п╬п╡ п╤п╢п╟я┌я▄:
- idtype == P_PID
- п√п╢п╟я┌я▄ п©п╬я┌п╬п╪п╨п╟, я┤п╣п╧ ID п©я─п╬я├п╣я│я│п╟ я│п╬п╡п©п╟п╢п╟п╣я┌ я│ id.
- idtype == P_PGID
- п√п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟, я┤п╣п╧ ID пЁя─я┐п©п©я▀ п©я─п╬я├п╣я│я│п╬п╡ я│п╬п╡п©п╟п╢п╟п╣я┌ я│ id.
- idtype == P_ALL
- п√п╢п╟я┌я▄ п╩я▌п╠п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟; п╥п╫п╟я┤п╣п╫п╦п╣ id п╦пЁп╫п╬я─п╦я─я┐п╣я┌я│я▐.
п·п╤п╦п╢п╟п╣п╪я▀п╣ п╦п╥п╪п╣п╫п╣п╫п╦я▐ я│п╬я│я┌п╬я▐п╫п╦я▐ п©п╬я┌п╬п╪п╨п╬п╡ п╥п╟п╢п╟я▌я┌я│я▐ я│п╩п╣п╢я┐я▌я┴п╦п╪п╦ я└п╩п╟пЁп╟п╪п╦ п╡ options (п╬п╠я┼п╣п╢п╦п╫я▐я▌я┌я│я▐ я┤п╣я─п╣п╥ OR):
- WEXITED
- п√п╢п╟я┌я▄ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п©п╬я┌п╬п╪п╨п╬п╡.
- WSTOPPED
- п√п╢п╟я┌я▄ п©п╬я┌п╬п╪п╨п╬п╡, п╨п╬я┌п╬я─я▀п╣ п╥п╟п╡п╣я─я┬п╟я┌я│я▐ п©п╬ п©п╬п╩я┐я┤п╣п╫п╦я▌ я│п╦пЁп╫п╟п╩п╟.
- WCONTINUED
- п√п╢п╟я┌я▄ п╡п╬п╥п╬п╠п╫п╬п╡п╩п╣п╫п╦я▐ я─п╟п╠п╬я┌я▀ п©п╬я┌п╬п╪п╨п╬п╡ (я─п╟п╫п╣п╣ п╬я│я┌п╟п╫п╬п╡п╩п╣п╫п╫я▀я┘) п©я─п╦ п©п╬п╩я┐я┤п╣п╫п╦п╦ я│п╦пЁп╫п╟п╩п╟ SIGCONT.
п■п╬п©п╬п╩п╫п╦я┌п╣п╩я▄п╫п╬ я│ п©п╬п╪п╬я┴я▄я▌ OR п╡ options п╪п╬пЁя┐я┌ п╥п╟п╢п╟п╡п╟я┌я▄я│я▐ я│п╩п╣п╢я┐я▌я┴п╦п╣ я└п╩п╟пЁп╦:
- WNOHANG
- п п╟п╨ п╡ waitpid().
- WNOWAIT
- п·я│я┌п╟п╡п╦я┌я▄ п©п╬я┌п╬п╪п╨п╟ п╡ я│п╬я│я┌п╬я▐п╫п╦п╦ п╬п╤п╦п╢п╟п╫п╦я▐; п©п╬я│п╩п╣п╢я┐я▌я┴п╦п╧ п╡я▀п╥п╬п╡ wait я│п╪п╬п╤п╣я┌ я│п╫п╬п╡п╟ п©п╬п╩я┐я┤п╦я┌я▄ п╦п╫я└п╬я─п╪п╟я├п╦я▌ п╬ я│п╬я│я┌п╬я▐п╫п╦п╦ п©п╬я┌п╬п╪п╨п╟.
п÷я─п╦ я┐я│п©п╣я┬п╫п╬п╪ п╡п╬п╥п╡я─п╟я┌п╣, waitid() п╥п╟п©п╬п╩п╫я▐п╣я┌ я│п╩п╣п╢я┐я▌я┴п╦п╣ п©п╬п╩я▐ п╡ я│я┌я─я┐п╨я┌я┐я─п╣ siginfo_t, я┐п╨п╟п╥я▀п╡п╟п╣п╪п╬п╧ п╦п╥ infop:
- si_pid
- ID п©я─п╬я├п╣я│я│п╟ п©п╬я┌п╬п╪п╨п╟.
- si_uid
- п═п╣п╟п╩я▄п╫я▀п╧ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▄я│п╨п╦п╧ ID п©п╬я┌п╬п╪п╨п╟. (п╜я┌п╬ п©п╬п╩п╣ п╫п╣ п╥п╟п©п╬п╩п╫я▐п╣я┌я│я▐ п╡ п╠п╬п╩я▄я┬п╦п╫я│я┌п╡п╣ п╢я─я┐пЁп╦я┘ я─п╣п╟п╩п╦п╥п╟я├п╦п╧.)
- si_signo
- п▓я│п╣пЁп╢п╟ я┐я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌я│я▐ п╡ SIGCHLD.
- si_status
- п≈п╟п©п╬п╩п╫я▐п╣я┌я│я▐ п╨п╬п╢п╬п╪ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐ п©п╬я┌п╬п╪п╨п╟, п╥п╟п╢п╟п╫п╫п╬п╪ п╡ _exit(2) (п╦п╩п╦ п╡ exit(3)), п╦п╩п╦ п╫п╬п╪п╣я─п╬п╪ я│п╦пЁп╫п╟п╩п╟, п╨п╬я┌п╬я─я▀п╧ п©я─п╣я─п╡п╟п╩, п╬я│я┌п╟п╫п╬п╡п╦п╩ п╦п╩п╦ п©я─п╬п╢п╬п╩п╤п╦п╩ я─п╟п╠п╬я┌я┐ п©п╬я┌п╬п╪п╨п╟. п╖я┌п╬ п╥п╟п©п╦я│п╟п╫п╬ п╡ п╢п╟п╫п╫п╬п╪ п©п╬п╩п╣ п╪п╬п╤п╫п╬ п╬п©я─п╣п╢п╣п╩п╦я┌я▄ п©п╬ п╥п╫п╟я┤п╣п╫п╦я▌ п©п╬п╩я▐ si_code.
- si_code
- пёя│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌я│я▐ п╡ п╬п╢п╫п╬ п╦п╥: CLD_EXITED (п©п╬я┌п╬п╪п╬п╨ п╡я▀п╥п╡п╟п╩ _exit(2)); CLD_KILLED (п©п╬я┌п╬п╪п╬п╨ п╥п╟п╡п╣я─я┬п╦п╩ я─п╟п╠п╬я┌я┐ п©п╬ я│п╦пЁп╫п╟п╩я┐); CLD_DUMPED (п©п╬я┌п╬п╪п╬п╨ п╥п╟п╡п╣я─я┬п╦п╩ я─п╟п╠п╬я┌я┐ п©п╬ я│п╦пЁп╫п╟п╩я┐ п╦ п╠я▀п╩ я│п╬п╥п╢п╟п╫ п╢п╟п╪п© п©п╟п╪я▐я┌п╦); CLD_STOPPED (п©п╬я┌п╬п╪п╬п╨ п©я─п╦п╬я│я┌п╟п╫п╬п╡п╩п╣п╫ п©п╬ я│п╦пЁп╫п╟п╩я┐); CLD_TRAPPED (я┌я─п╟я│я│п╦я─я┐п╣п╪я▀п╧ п©п╬я┌п╬п╪п╬п╨ п╠я▀п╩ п╥п╟я┘п╡п╟я┤п╣п╫); п╦п╩п╦ CLD_CONTINUED (п©п╬я┌п╬п╪п╬п╨ п©я─п╬п╢п╬п╩п╤п╦п╩ я─п╟п╠п╬я┌я┐ п©п╬ я│п╦пЁп╫п╟п╩я┐ SIGCONT).
п∙я│п╩п╦ п╡ options я┐п╨п╟п╥п╟п╫ я└п╩п╟пЁ WNOHANG п╦ п╫п╣я┌ п©п╬я┌п╬п╪п╨п╬п╡ п╡ п╬п╤п╦п╢п╟п╣п╪п╬п╪ я│п╬я│я┌п╬я▐п╫п╦п╦, я┌п╬ waitid() я│я─п╟п╥я┐ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ 0, п╟ я│п╬я│я┌п╬я▐п╫п╦п╣ я│я┌я─я┐п╨я┌я┐я─я▀ siginfo_t, п╫п╟ п╨п╬я┌п╬я─я┐я▌ я┐п╨п╟п╥я▀п╡п╟п╣я┌ infop, п╫п╣п╬п©я─п╣п╢п╣п╩я▒п╫п╫п╬. п╖я┌п╬п╠я▀ п╬я┌п╩п╦я┤п╟я┌я▄ я█я┌п╬я┌ я│п╩я┐я┤п╟п╧ п╬я┌ я┌п╬пЁп╬, пЁп╢п╣ п©п╬я┌п╬п╪п╬п╨ п╠я▀п╩ п╡ п╬п╤п╦п╢п╟п╣п╪п╬п╪ я│п╬я│я┌п╬я▐п╫п╦п╦, п╬п╠п╫я┐п╩п╦я┌п╣ п©п╬п╩п╣ si_pid п©п╣я─п╣п╢ п╡я▀п╥п╬п╡п╬п╪ п╦ п©я─п╬п╡п╣я─я▄я┌п╣ п╫п╣п╫я┐п╩п╣п╡п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣ п╡ я█я┌п╬п╪ п©п╬п╩п╣ п©п╬я│п╩п╣ п╬я┌я─п╟п╠п╬я┌п╨п╦ п╡я▀п╥п╬п╡п╟.
п▓п·п≈п▓п═п░п╘п░п∙п°п·п∙ п≈п²п░п╖п∙п²п≤п∙¶
п▓ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┬п╫п╬пЁп╬ п╡я▀п©п╬п╩п╫п╣п╫п╦я▐ wait() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ ID п©я─п╬я├п╣я│я│п╟ п╥п╟п╡п╣я─я┬п╦п╡я┬п╣пЁп╬я│я▐ п©п╬я┌п╬п╪п╨п╟; п©я─п╦ п╬я┬п╦п╠п╨п╣ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1.
п▓ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┬п╫п╬пЁп╬ п╡я▀п©п╬п╩п╫п╣п╫п╦я▐ waitpid() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ ID п©я─п╬я├п╣я│я│п╟ п©п╬я┌п╬п╪п╨п╟, я┤я▄я▒ я│п╬я│я┌п╬я▐п╫п╦п╣ п╦п╥п╪п╣п╫п╦п╩п╬я│я▄; п╣я│п╩п╦ п╥п╟п╢п╟п╫ я└п╩п╟пЁ WNOHANG п╦ я│я┐я┴п╣я│я┌п╡я┐п╣я┌ п╬п╢п╦п╫ п╦п╩п╦ п╠п╬п╩п╣п╣ п©п╬я┌п╬п╪п╨п╬п╡, п╥п╟п╢п╟п╫п╫я▀я┘ п╡ pid, п╠п╣п╥ п╦п╥п╪п╣п╫я▒п╫п╫п╬пЁп╬ я│п╬я│я┌п╬я▐п╫п╦я▐, я┌п╬ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ 0. п÷я─п╦ п╬я┬п╦п╠п╨п╣ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1.
п▓я▀п╥п╬п╡ waitid() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ 0 п╡ я│п╩я┐я┤п╟п╣ я┐я│п©п╣я┬п╫п╬пЁп╬ п╡я▀п©п╬п╩п╫п╣п╫п╦я▐ п╦п╩п╦ п╣я│п╩п╦ п╥п╟п╢п╟п╫ я└п╩п╟пЁ WNOHANG п╦ п©п╬п╨п╟ п╫п╣ я│я┐я┴п╣я│я┌п╡я┐п╣я┌ п©п╬я┌п╬п╪п╨п╟(п╬п╡), я┐п╨п╟п╥п╟п╫п╫п╬пЁп╬ п╡ pid,я│ п╦п╥п╪п╣п╫я▒п╫п╫я▀п╪ я│п╬я│я┌п╬я▐п╫п╦п╣п╪. п÷я─п╦ п╬я┬п╦п╠п╨п╣ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌я│я▐ -1. п п╟п╤п╢я▀п╧ п╦п╥ я█я┌п╦я┘ п╡я▀п╥п╬п╡п╬п╡ п╥п╟п©п╦я│я▀п╡п╟п╣я┌ п╡ errno я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐я▌я┴я┐я▌ п©я─п╦я┤п╦п╫я┐ п╬я┬п╦п╠п╨п╦.
п·п╗п≤п▒п п≤¶
- ECHILD
- (п╢п╩я▐ wait()) пё п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟ п╫п╣я┌ п╬п╤п╦п╢п╟я▌я┴п╦я┘ п©п╬я┌п╬п╪п╨п╬п╡.
- ECHILD
- (п╢п╩я▐ waitpid() п╦п╩п╦ waitid()) п÷я─п╬я├п╣я│я│, п╥п╟п╢п╟п╫п╫я▀п╧ pid (waitpid()) п╦п╩п╦ idtype п╦ id (waitid()), п╫п╣ я│я┐я┴п╣я│я┌п╡я┐п╣я┌ п╦п╩п╦ п╫п╣ я▐п╡п╩я▐п╣я┌я│я▐ п©п╬я┌п╬п╪п╨п╬п╪ п╡я▀п╥п╡п╟п╡я┬п╣пЁп╬ п©я─п╬я├п╣я│я│п╟. (п╜я┌п╬ п╪п╬п╤п╣я┌ я│п╩я┐я┤п╦я┌я▄я│я▐ п╢п╩я▐ я│п╡п╬п╣пЁп╬ п©п╬я┌п╬п╪п╨п╟, п╣я│п╩п╦ п╢п╣п╧я│я┌п╡п╦п╣ п╢п╩я▐ SIGCHLD я┐я│я┌п╟п╫п╬п╡п╩п╣п╫п╬ п╡ SIG_IGN. п║п╪. я┌п╟п╨п╤п╣ я─п╟п╥п╢п╣п╩ Linux Notes п╬ п╫п╦я┌я▐я┘.)
- EINTR
- п╓п╩п╟пЁ WNOHANG п╫п╣ п╥п╟п╢п╟п╫ п╦ п╠я▀п╩ п©п╬п╧п╪п╟п╫ п╫п╣п╠п╩п╬п╨п╦я─я┐п╣п╪я▀п╧ я│п╦пЁп╫п╟п╩ п╦п╩п╦ SIGCHLD; я│п╪. signal(7).
- EINVAL
- п²п╣п╢п╬п©я┐я│я┌п╦п╪п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣ options.
п║п·п·п╒п▓п∙п╒п║п╒п▓п≤п∙ п║п╒п░п²п■п░п═п╒п░п°¶
SVr4, 4.3BSD, POSIX.1-2001.
п≈п░п°п∙п╖п░п²п≤п╞¶
п÷п╬я┌п╬п╪п╬п╨, п╨п╬я┌п╬я─я▀п╧ п╥п╟п╡п╣я─я┬п╦п╩я│я▐, п╫п╬ п╨п╬я┌п╬я─п╬пЁп╬ п╫п╣ п╤п╢п╟п╩п╦, я│я┌п╟п╫п╬п╡п╦я┌я│я▐ "п╥п╬п╪п╠п╦ (zombie)". п╞п╢я─п╬ п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌ п╪п╦п╫п╦п╪п╟п╩я▄п╫я▀п╧ п╫п╟п╠п╬я─ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╬ п©я─п╬я├п╣я│я│п╟я┘ п╥п╬п╪п╠п╦ (PID, я│п╬я│я┌п╬я▐п╫п╦п╣ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐, п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╫я▀п╣ я─п╣я│я┐я─я│я▀), я┤я┌п╬п╠я▀ п©п╬п╥п╤п╣ п©п╬п╥п╡п╬п╩п╦я┌я▄ я─п╬п╢п╦я┌п╣п╩я▌ п╡я▀п©п╬п╩п╫п╦я┌я▄ п©я─п╬я├п╣я│я│ п╬п╤п╦п╢п╟п╫п╦я▐ п╢п╩я▐ п©п╬п╩я┐я┤п╣п╫п╦я▐ п╦п╫я└п╬я─п╪п╟я├п╦п╦ п╬ п©п╬я┌п╬п╪п╨п╣. п■п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ п╥п╬п╪п╠п╦ п╫п╣ п╠я┐п╢п╣я┌ я┐п╢п╟п╩я▒п╫ п╦п╥ я│п╦я│я┌п╣п╪я▀ я┤п╣я─п╣п╥ п©я─п╬я├п╣я│я│ п╬п╤п╦п╢п╟п╫п╦я▐ (wait), п╬п╫ п╥п╟п╫п╦п╪п╟п╣я┌ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╬ (slot) п╡ я┌п╟п╠п╩п╦я├п╣ п©я─п╬я├п╣я│я│п╬п╡ я▐п╢я─п╟, п╦ п╣я│п╩п╦ я┌п╟п╠п╩п╦я├п╟ п╥п╟п©п╬п╩п╫п╦я┌я│я▐, я│я┌п╟п╫п╣я┌ п╫п╣п╡п╬п╥п╪п╬п╤п╫п╬ я│п╬п╥п╢п╟п╡п╟я┌я▄ п╫п╬п╡я▀п╣ п©я─п╬я├п╣я│я│я▀. п∙я│п╩п╦ я─п╬п╢п╦я┌п╣п╩я▄я│п╨п╦п╧ п©я─п╬я├п╣я│я│ п╥п╟п╡п╣я─я┬п╟п╣я┌ я─п╟п╠п╬я┌я┐, я┌п╬ п╣пЁп╬ п©п╬я┌п╬п╪п╨п╦ "п╥п╬п╪п╠п╦" (п╣я│п╩п╦ п╣я│я┌я▄) я┐я│я▀п╫п╬п╡п╩я▐я▌я┌я│я▐ п©я─п╬я├п╣я│я│п╬п╪ init(8), п╨п╬я┌п╬я─я▀п╧ п╟п╡я┌п╬п╪п╟я┌п╦я┤п╣я│п╨п╦ п╡я▀п©п╬п╩п╫я▐п╣я┌ п©я─п╬я├п╣п╢я┐я─я┐ п╬п╤п╦п╢п╟п╫п╦я▐ п╢п╩я▐ я┐п╢п╟п╩п╣п╫п╦я▐ п╥п╬п╪п╠п╦.
п▓ POSIX.1-2001 я┐п╨п╟п╥п╟п╫п╬, я┤я┌п╬ п╣я│п╩п╦ п╢п╩я▐ SIGCHLD я┐п╨п╟п╥п╟п╫ я└п╩п╟пЁ SIG_IGN п╦п╩п╦ SA_NOCLDWAIT (я│п╪.sigaction(2)), я┌п╬ п╥п╟п╡п╣я─я┬п╟я▌я┴п╦п╣я│я▐ п©п╬я┌п╬п╪п╨п╦ п╫п╣ я│я┌п╟п╫п╬п╡я▐я┌я│я▐ п╥п╬п╪п╠п╦, п╟ п╡я▀п╥п╬п╡ wait() п╦п╩п╦ waitpid() п╠я┐п╢п╣я┌ п╡я▀п©п╬п╩п╫я▐я┌я▄я│я▐ я─п╟п╠п╬я┌я┐ п╢п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ п╡я│п╣ п©п╬я┌п╬п╪п╨п╦ п╫п╣ п╥п╟п╡п╣я─я┬п╟я┌ я─п╟п╠п╬я┌я┐, п╦ п╥п╟я┌п╣п╪ п╥п╟п╡п╣я─я┬п╦я┌я│я▐ п╫п╣я┐п╢п╟я┤п╫п╬ я│ errno, я─п╟п╡п╫я▀п╪ ECHILD. (п▓ п╬я─п╦пЁп╦п╫п╟п╩я▄п╫п╬п╪ я│я┌п╟п╫п╢п╟я─я┌п╣ POSIX я┌п╟п╨п╬п╣ п╥п╫п╟я┤п╣п╫п╦п╣ п╫п╟я│я┌я─п╬п╧п╨п╦ SIGCHLD п╡ SIG_IGN п╫п╣ п╬п©я─п╣п╢п╣п╩п╣п╫п╬. п≈п╟п╪п╣я┌п╦п╪, я┤я┌п╬ я┘п╬я┌я▐ п©п╬п╡п╣п╢п╣п╫п╦п╣ SIGCHLD п©п╬ я┐п╪п╬п╩я┤п╟п╫п╦я▌ я▐п╡п╩я▐п╣я┌я│я▐ "п╦пЁп╫п╬я─п╦я─п╬п╡п╟п╫п╦п╣", я▐п╡п╫п╬п╣ я┐я│я┌п╟п╫п╬п╡п╨п╟ п╡ SIG_IGN п©я─п╦п╡п╬п╢п╦я┌ п╢я─я┐пЁп╬п╪я┐ п╬п╠я─п╟я┴п╣п╫п╦я▌ я│ п©п╬я┌п╬п╪п╨п╟п╪п╦ п╥п╬п╪п╠п╦.) Linux 2.6 я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐п╣я┌ п╢п╟п╫п╫п╬п╧ я│п©п╣я├п╦я└п╦п╨п╟я├п╦п╦. п·п╢п╫п╟п╨п╬, Linux 2.4 (п╦ я─п╟п╫п╣п╣) п╫п╣ я│п╬п╬я┌п╡п╣я┌я│я┌п╡я┐п╣я┌: п╣я│п╩п╦ п╡я▀п╥п╬п╡ wait() п╦п╩п╦ waitpid() я│п╢п╣п╩п╟п╫ п©я─п╦ п╦пЁп╫п╬я─п╦я─п╬п╡п╟п╫п╦п╦ SIGCHLD, п╡я▀п╥п╬п╡ я─п╟п╠п╬я┌п╟п╣я┌ п╨п╟п╨ п╣я│п╩п╦ п╠я▀ SIGCHLD п╫п╣ п╦пЁп╫п╬я─п╦я─п╬п╡п╟п╩я│я▐, я┌п╬ п╣я│я┌я▄, п╡я▀п╥п╬п╡ п╠п╩п╬п╨п╦я─я┐п╣я┌ я─п╟п╠п╬я┌я┐ п╢п╬ я┌п╣я┘ п©п╬я─, п©п╬п╨п╟ я│п╩п╣п╢я┐я▌я┴п╦п╧ п©п╬я┌п╬п╪п╬п╨ п╫п╣ п╥п╟п╡п╣я─я┬п╦я┌ я─п╟п╠п╬я┌я┐ п╦ п╥п╟я┌п╣п╪ п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ ID п©я─п╬я├п╣я│я│п╟ п╦ я│п╬я│я┌п╬я▐п╫п╦п╣ я█я┌п╬пЁп╬ п©п╬я┌п╬п╪п╨п╟.
п≈п╟п╪п╣я┤п╟п╫п╦я▐, п╨п╟я│п╟я▌я┴п╦п╣я│я▐ Linux¶
п▓ я▐п╢я─п╣ Linux п╫п╦я┌п╦, я┐п©я─п╟п╡п╩я▐п╣п╪я▀п╣ я▐п╢я─п╬п╪, я┐я│я┌я─п╬п╧я│я┌п╡п╬п╪ п╫п╣ п╬я┌п╩п╦я┤п╟я▌я┌я│я▐ п╬я┌ п©я─п╬я├п╣я│я│п╟. п²п╦я┌я▄ — я█я┌п╬ п©я─п╬я│я┌п╬ п©я─п╬я├п╣я│я│, п╨п╬я┌п╬я─я▀п╧ я│п╬п╥п╢п╟п╫ я┐п╫п╦п╨п╟п╩я▄п╫я▀п╪ (я│я┐я┴п╣я│я┌п╡я┐я▌я┴п╦п╪ я┌п╬п╩я▄п╨п╬ п╡ Linux) я│п╦я│я┌п╣п╪п╫я▀п╪ п╡я▀п╥п╬п╡п╬п╪ clone(2); п╢я─я┐пЁп╦п╣ п©я─п╬я├п╣п╢я┐я─я▀, я┌п╟п╨п╦п╣ п╨п╟п╨ п©п╣я─п╣п╫п╬я│п╦п╪п╟я▐ п╡п╣я─я│п╦я▐ pthread_create(3), я┌п╟п╨п╤п╣ я─п╣п╟п╩п╦п╥п╬п╡п╟п╫я▀ я│ п©п╬п╪п╬я┴я▄я▌ clone(2). п■п╬ Linux 2.4, п╫п╦я┌я▄ п©я─п╣п╢я│я┌п╟п╡п╩я▐п╩п╟ я│п╬п╠п╬п╧ я│п©п╣я├п╦п╟п╩п╦п╥п╦я─п╬п╡п╟п╫п╫я▀п╧ п╡п╟я─п╦п╟п╫я┌ п©я─п╬я├п╣я│я│п╟, п╦, п╨п╟п╨ я│п╩п╣п╢я│я┌п╡п╦п╣, п╫п╦я┌я▄ п╫п╣ п╪п╬пЁп╩п╟ п╤п╢п╟я┌я▄ п©п╬я┌п╬п╪п╨п╬п╡ п╢я─я┐пЁп╬п╧ п╫п╦я┌п╦, п╢п╟п╤п╣ п╨п╬пЁп╢п╟ п©п╬я│п╩п╣п╢п╫я▐я▐ п©я─п╦п╫п╟п╢п╩п╣п╤п╟п╩п╟ я┌п╬п╧ п╤п╣ пЁя─я┐п©п©п╣ п╫п╦я┌п╣п╧. п·п╢п╫п╟п╨п╬, п╡ POSIX п╡п©п╦я│п╟п╩п╦ я┌п╟п╨я┐я▌ я└я┐п╫п╨я├п╦п╬п╫п╟п╩я▄п╫п╬я│я┌я▄, п╦, п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.4, п╫п╦я┌я▄ п╪п╬п╤п╣я┌, п╦ п©п╬ я┐п╪п╬п╩я┤п╟п╫п╦я▌ п╠я┐п╢п╣я┌ п╤п╢п╟я┌я▄ п©п╬я┌п╬п╪п╨п╬п╡ п╢я─я┐пЁп╦я┘ п╫п╦я┌п╣п╧ п╡ я┌п╬п╧ п╤п╣ пЁя─я┐п©п©п╣ п╫п╦я┌п╣п╧.
п║п╩п╣п╢я┐я▌я┴п╦п╣ п╥п╫п╟я┤п╣п╫п╦я▐ options, п©я─п╦я│я┐я┴п╦п╣ я┌п╬п╩я▄п╨п╬ Linux, п╦я│п©п╬п╩я▄п╥я┐я▌я┌я│я▐ п╢п╩я▐ п©п╬я┌п╬п╪п╨п╬п╡, я│п╬п╥п╢п╟п╫п╫я▀я┘ я│ п©п╬п╪п╬я┴я▄я▌ clone(2); п╬п╫п╦ п╫п╣ п╪п╬пЁя┐я┌ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄я│я▐ я│ waitid():
- __WCLONE
- п√п╢п╟я┌я▄ я┌п╬п╩я▄п╨п╬ "п╨п╩п╬п╫п╦я─п╬п╡п╟п╫п╫я▀я┘ (clone)" п©п╬я┌п╬п╪п╨п╬п╡. п∙я│п╩п╦ п╫п╣ я┐п╨п╟п╥п╟п╫п╬, я┌п╬ п╬п╤п╦п╢п╟я▌я┌я│я▐ я┌п╬п╩я▄п╨п╬ "п╫п╣ п╨п╩п╬п╫п╦я─п╬п╡п╟п╫п╫я▀п╣" п©п╬я┌п╬п╪п╨п╦. ("п п╩п╬п╫п╦я─п╬п╡п╟п╫п╫я▀п╧" п©п╬я┌п╬п╪п╬п╨ я█я┌п╬ я┌п╬я┌, п╨п╬я┌п╬я─я▀п╧ п╫п╣ п©п╣я─п╣п╢п╟я▒я┌ я│п╦пЁп╫п╟п╩, п╦п╩п╦ я│п╦пЁп╫п╟п╩, п╬я┌п╩п╦я┤п╫я▀п╧ п╬я┌ SIGCHLD, я│п╡п╬п╣п╪я┐ я─п╬п╢п╦я┌п╣п╩я▌ п©я─п╦ п╥п╟п╡п╣я─я┬п╣п╫п╦п╦.) п╜я┌п╬я┌ п╟я─пЁя┐п╪п╣п╫я┌ п╦пЁп╫п╬я─п╦я─я┐п╣я┌я│я▐, п╣я│п╩п╦ я┌п╟п╨п╤п╣ я┐п╨п╟п╥п╟п╫п╬ __WALL.
- __WALL (п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.4)
- п√п╢п╟я┌я▄ п╡я│п╣я┘ п©п╬я┌п╬п╪п╨п╬п╡ п╫п╣п╥п╟п╡п╦я│п╦п╪п╬ п╬я┌ я┌п╦п©п╟ ("п╨п╩п╬п╫п╦я─п╬п╡п╟п╫п╫я▀п╧" п╦п╩п╦ "п╫п╣п╨п╩п╬п╫п╦я─п╬п╡п╟п╫п╫я▀п╧").
- __WNOTHREAD (п╫п╟я┤п╦п╫п╟я▐ я│ Linux 2.4)
- п²п╣ п╤п╢п╟я┌я▄ п©п╬я┌п╬п╪п╨п╬п╡ п╢я─я┐пЁп╦я┘ п╫п╦я┌п╣п╧ п╡ я┌п╬п╧ п╤п╣ пЁя─я┐п©п©п╣ п╫п╦я┌п╣п╧. п╜я┌п╬ п©п╬п╡п╣п╢п╣п╫п╦п╣ п©п╬ я┐п╪п╬п╩я┤п╟п╫п╦я▌ п╢п╬ Linux 2.4.
п÷п═п≤п°п∙п═¶
п▓ я│п╩п╣п╢я┐я▌я┴п╣п╧ п©я─п╬пЁя─п╟п╪п╪п╣ п©п╬п╨п╟п╥п╟п╫п╬ п╦я│п©п╬п╩я▄п╥п╬п╡п╟п╫п╦п╣ fork(2) п╦ waitpid(). п÷я─п╬пЁя─п╟п╪п╪п╟ я│п╬п╥п╢п╟я▒я┌ п©я─п╬я├п╣я│я│ п©п╬я┌п╬п╪п╬п╨. п∙я│п╩п╦ п©я─п╬пЁя─п╟п╪п╪п╟ п╥п╟п©я┐я┴п╣п╫п╟ п╠п╣п╥ п©п╟я─п╟п╪п╣я┌я─п╬п╡, я┌п╬ п©п╬я┌п╬п╪п╬п╨ п©я─п╦п╬я│я┌п╟п╫п╟п╡п╩п╦п╡п╟п╣я┌ п╡я▀п©п╬п╩п╫п╣п╫п╦п╣ я│ п©п╬п╪п╬я┴я▄я▌ pause(2), я┤я┌п╬п╠я▀ п©п╬п╥п╡п╬п╩п╦я┌я▄ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩я▌ п©п╬я│п╩п╟я┌я▄ я│п╦пЁп╫п╟п╩ п©п╬я┌п╬п╪п╨я┐. п≤п╫п╟я┤п╣, п╣я│п╩п╦ п╡ п╨п╬п╪п╟п╫п╢п╫п╬п╧ я│я┌я─п╬п╨п╣ п╥п╟п╢п╟п╫ п©п╟я─п╟п╪п╣я┌я─, я┌п╬ п©п╬я┌п╬п╪п╬п╨ п╥п╟п╡п╣я─я┬п╟п╣я┌ я─п╟п╠п╬я┌я┐ я│я─п╟п╥я┐, п╦я│п©п╬п╩я▄п╥я┐я▐ п©п╣я─п╣п╢п╟п╫п╫п╬п╣ п╡ п©п╟я─п╟п╪п╣я┌я─п╣ п╨п╬п╪п╟п╫п╢п╫п╬п╧ я│я┌я─п╬п╨п╦ я├п╣п╩п╬п╣ я┤п╦я│п╩п╬ п╨п╟п╨ п╨п╬п╢ п╥п╟п╡п╣я─я┬п╣п╫п╦я▐. п÷я─п╬я├п╣я│я│ я─п╬п╢п╦я┌п╣п╩я▄ я─п╟п╠п╬я┌п╟п╣я┌ п╡ я├п╦п╨п╩п╣, я│п╩п╣п╢я▐ п╥п╟ п©п╬я┌п╬п╪п╨п╬п╪ я│ п©п╬п╪п╬я┴я▄я▌ waitpid(), п╦ п╦я│п©п╬п╩я▄п╥я┐п╣я┌ п╪п╟п╨я─п╬я│я▀ W*(), п╬п©п╦я│п╟п╫п╫я▀п╣ я─п╟п╫п╣п╣, п╢п╩я▐ п╟п╫п╟п╩п╦п╥п╟ п╥п╫п╟я┤п╣п╫п╦я▐ я│п╬я│я┌п╬я▐п╫п╦я▐ п╬п╤п╦п╢п╟п╫п╦я▐.
п║п╩п╣п╢я┐я▌я┴п╦п╧
я│п╣п╟п╫я│
я─п╟п╠п╬я┌я▀
п╡
п╬п╠п╬п╩п╬я┤п╨п╣
п©п╬п╨п╟п╥я▀п╡п╟п╣я┌
я─п╟п╠п╬я┌я┐
я│
п©я─п╬пЁя─п╟п╪п╪п╬п╧:
$ ./a.out & Child PID is 32360 [1] 32359 $ kill -STOP 32360 stopped by signal 19 $ kill -CONT 32360 continued $ kill -TERM 32360 killed by signal 15 [1]+ Done ./a.out $
п≤я│я┘п╬п╢п╫я▀п╧ п╨п╬п╢ п©я─п╬пЁя─п╟п╪п╪я▀¶
#include <sys/wait.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> int main(int argc, char *argv[]) {
pid_t cpid, w;
int status;
cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { /* п п╬п╢, п╡я▀п©п╬п╩п╫я▐п╣п╪я▀п╧ п©п╬я┌п╬п╪п╨п╬п╪ */
printf("Child PID is %ld\n", (long) getpid());
if (argc == 1)
pause(); /* п·п╤п╦п╢п╟п╫п╦п╣ я│п╦пЁп╫п╟п╩п╬п╡ */
_exit(atoi(argv[1]));
} else { /* п п╬п╢, п╡я▀п©п╬п╩п╫я▐п╣п╪я▀п╧ я─п╬п╢п╦я┌п╣п╩п╣п╪ */
do {
w = waitpid(cpid, &status, WUNTRACED | WCONTINUED);
if (w == -1) {
perror("waitpid");
exit(EXIT_FAILURE);
}
if (WIFEXITED(status)) {
printf("exited, status=%d\n", WEXITSTATUS(status));
} else if (WIFSIGNALED(status)) {
printf("killed by signal %d\n", WTERMSIG(status));
} else if (WIFSTOPPED(status)) {
printf("stopped by signal %d\n", WSTOPSIG(status));
} else if (WIFCONTINUED(status)) {
printf("continued\n");
}
} while (!WIFEXITED(status) && !WIFSIGNALED(status));
exit(EXIT_SUCCESS);
} }
п║п°п·п╒п═п≤п╒п∙ п╒п░п п√п∙¶
_exit(2), clone(2), fork(2), kill(2), ptrace(2), sigaction(2), signal(2), wait4(2), pthread_create(3), credentials(7), signal(7)
2009-04-21 | Linux |